library(tidyverse)
library(ggplot2)
library(dplyr)
library(covid19br)
library(janitor)
library(lubridate)
library(googlesheets4)
library(magrittr)
# Definindo tema
theme_set(hrbrthemes::theme_ipsum())

# Importando os dados -------------------------------------------------------------

dataset <- readxl::read_excel("Dataset - COVID Executivos Estaduais.xlsx", 
                   sheet = "Normas por estado") %>% 
  janitor::clean_names() %>% 
  mutate( #agrupando as ações de saúde em categorias
    processos_de_servicos_de_saude = diretrizes_de_tratamento+
      reorientacao_da_provisao_de_servicos+
      outros_processos,
    
    recursos_humanos = aumentar_o_numero_de_profissionais_de_saude+
      medidas_de_protecao_dos_profissionais_de_saude+
      treinamento_dos_profissionais_de_saude+
      outros_rh,
    
    acoes_de_vigilancia_epidemiologica = identificacao_de_casos+
      isolamento_de_casos_positivos+
      outros_vigilancia,
    
    infraestrutura = aumento_da_capacidade_da_urgencia_e_emergencia+
      aumento_da_capacidade_de_internacao+
      aumento_da_capacidade_da_atencao_basica+
      outros_infraestrutura,
    
    gastos = aquisicao_de_insumo+
      realocacao_de_recurso+
      aumento_de_recurso+
      contratacao_de_pessoal+
      investimento_em_infraestrutura+
      outros_gastos,
    
    total_acoes = processos_de_servicos_de_saude+
                  recursos_humanos+
                  acoes_de_vigilancia_epidemiologica+
                  infraestrutura+ gastos
    ) 
  
# Adicionando as classificações por tipo de normativa

classificacoes <- readxl::read_excel("Dataset - COVID Executivos Estaduais.xlsx", 
                                     sheet = "Codebook", skip = 30) %>% 
  janitor::clean_names() %>% 
  separate_wider_delim(tipos_de_normativas, delim = ". ",
                       names = c("tipos_de_normativas", "descricao_normativa")) %>% 
  mutate(tipos_de_normativas = as.numeric(tipos_de_normativas))
  
dataset <- dataset %>% 
  left_join(classificacoes,
            join_by(tipo_de_normativa_ver_tabela == tipos_de_normativas))

# ANÁLISE DESCRITIVA  ---------------------------------------------------------

## Gráfico 1. Classificação das Ações de Saúde nas Normativas ----
dataset %>% 
  pivot_longer(cols = c(processos_de_servicos_de_saude:gastos),
               names_to = "tipo_acao",
               values_to = "contagem_acao") %>% 
  summarise(contagem_acao = sum(contagem_acao, na.rm = TRUE),
            .by = tipo_acao) %>% 
  mutate(tipo_acao = str_replace_all(tipo_acao, "_", " ") %>% 
           str_to_title()) %>% 
  ggplot(
    aes( x = reorder(tipo_acao, contagem_acao),
         y = contagem_acao))+
  geom_col(fill = "seagreen")+
  geom_text(aes(label = contagem_acao),
            color = "white",
            hjust = 1)+
  coord_flip()+
  labs(x = NULL, y = NULL, title = NULL)+
  scale_y_continuous(expand = c(0,0)) +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold"),
    axis.title.y = element_text(hjust = 0.5, face = "bold"),
    legend.position = "none"
  )


## Gráfico 2. Normativas de Saúde por Subcategorias ----

dataset %>% 
  pivot_longer(cols = c(diretrizes_de_tratamento:outros_gastos),
               names_to = "tipo_acao",
               values_to = "contagem_acao") %>% 
  summarise(contagem_acao = sum(contagem_acao, na.rm = TRUE),
            .by = tipo_acao) %>% 
  mutate(tipo_acao = str_replace_all(tipo_acao, "_", " ") %>% 
           str_to_title()) %>% 
  ggplot(
    aes( x = reorder(tipo_acao, contagem_acao),
         y = contagem_acao))+
  geom_col(fill = "seagreen")+
  geom_text(aes(label = contagem_acao),
            color = "white",
            hjust = 1)+
  coord_flip()+
  labs(x = "Subcategoria", y = NULL, title = NULL)+
  scale_y_continuous(expand = c(0,0)) 


## Gráfico 3. Tipos de Normativa ----

categorias_substitutas <- c("Termo de Contrato", "Resolução", "Portaria", "Dispensa de Licitação", "Decreto")

dataset %>%
  group_by(tipo_de_normativa_ver_tabela) %>%
  summarise(total_normativas = n()) %>%
  mutate(porcentagem = total_normativas / sum(total_normativas) * 100) %>%
  arrange(desc(total_normativas)) %>%
  top_n(5) %>%
  mutate(categoria_substituta = ifelse(tipo_de_normativa_ver_tabela %in% c(3, 8, 14, 16, 17),
                                       categorias_substitutas[tipo_de_normativa_ver_tabela %in% c(3, 8, 14, 16, 17)],
                                       as.character(tipo_de_normativa_ver_tabela))) %>%
  ggplot(aes(x = factor(categoria_substituta), y = total_normativas)) +
  geom_bar(stat = "identity", fill = "seagreen") +
  geom_text(aes(label = paste0(round(porcentagem, 1), "%")),
            vjust = -0.5, color = "black", size = 3) +
  labs(x = "Tipo de Normativa", y = "Número de Normativas",
       title = NULL)


## Gráfico 4. Número de normativas por estado e Área Temática ----
# Tipo de Ação por estado

dataset %>% 
  pivot_longer(cols = c(processos_de_servicos_de_saude:gastos),
               names_to = "tipo_acao",
               values_to = "contagem_acao") %>% 
  summarise(contagem_acao = sum(contagem_acao, na.rm = TRUE),
            .by = c(tipo_acao,estado)) %>% 
  drop_na(estado) %>% 
  mutate(tipo_acao = str_replace_all(tipo_acao, "_", " ") %>% 
           str_to_title()) %>% 
  ggplot(
    aes( x = reorder(estado, contagem_acao),
         y = contagem_acao, fill = tipo_acao))+
  geom_col(color = NA)+
  coord_flip()+
  labs(x = NULL, y = NULL, title = NULL,
       fill = "Tipo de Acão")+
  scale_y_continuous(expand = c(0,0))+
  scale_fill_viridis_d() +
  theme(legend.position = "right",
         legend.text = element_text(size = 8),
         plot.title = element_text(hjust = 0.5))



## Gráfico 5. Normativas por semana epidemiológica ----

dataset %<>%
  mutate(semana_epidemiologica = epiweek(data))

normativas_por_semana <- dataset %>%
  group_by(semana_epidemiologica) %>%
  summarise(total_normativas = n()) %>%
  na.omit

normativas_por_semana %>%
 ggplot(aes(x = semana_epidemiologica, y = total_normativas)) +
  geom_bar(stat = "identity", fill = "seagreen") +
  labs(x = "Semana Epidemiológica", y = "Número de Normativas",
       title = NULL) +
  scale_x_continuous(breaks = seq(1, 53, by = 4)) +
   theme(axis.text.x = element_text(angle = 90, hjust = 1)) 


## Gráfico 6. Normativas de saúde por semana epidemiológica ----
# Evolução de Normativas por Tipo de Ação - Janela de Covid

dataset %>% 
  mutate(semana_epidemiologica = epiweek(data),
         ano = epiyear(data)) %>% 
  dplyr::filter(ano %in% c(2020,2021)) %>%
  pivot_longer(cols = c(processos_de_servicos_de_saude:gastos),
               names_to = "tipo_acao",
               values_to = "contagem_acao") %>% 
  summarise(contagem_acao = sum(contagem_acao, na.rm = TRUE),
            .by = c(tipo_acao,semana_epidemiologica,ano)) %>% 
  mutate(tipo_acao = str_replace_all(tipo_acao, "_", " ") %>% 
           str_to_title()) %>% 
  ggplot(
    aes(x = semana_epidemiologica,
        y = contagem_acao, group = tipo_acao, color = tipo_acao)
  )+
  geom_line(linewidth = 1)+
  scale_x_continuous(breaks = seq(1,70,by=4))+
  labs(x = "Semana Epidemiológica", y = "Ações", 
       title = NULL,
       color = "Tipo Ação") +
  scale_fill_viridis_d()+
  scale_color_manual(values = c("Acoes De Vigilancia Epidemiologica" = "#1f78b4",
                                "Gastos" = "#a6cee3",
                                "Infraestrutura" = "#b2df8a",
                                "Processos De Servicos De Saude" = "#33a02c",
                                "Recursos Humanos" = "#fdbf6f")) + 
  facet_grid(rows = vars(ano)) +
  theme(legend.position = "bottom",
     legend.text = element_text(size = 7)) 



## Gráfico 7. Total de Normativas e Total de Síndrome Respiratória Aguda Grave por Semana Epidemiológica ----

#Lendo os dados de SRAG do Datasus
SRAG <- bind_rows(
  read_delim("SRAG2020.csv", 
             delim = ";", escape_double = FALSE, trim_ws = TRUE) %>% select(SEM_NOT, DT_NOTIFIC),
  read_delim("SRAG2021.csv", 
             delim = ";", escape_double = FALSE, trim_ws = TRUE) %>% select(SEM_NOT, DT_NOTIFIC)
)


#Renomeando a coluna
SRAG <- SRAG %>%
  rename (semana_epidemiologica = SEM_NOT)

# Calculando o total de casos de SRAG por semana epi
total_SRAG <- SRAG %>%
  group_by(semana_epidemiologica) %>%
  summarise(total_SRAG = n())


#Calculando o total de normativas por semana epi
total_normativas <- dataset %>%
  group_by(semana_epidemiologica) %>%
  summarise(total_normativas = n())

# Unindo os dataframes total_SRAG e total_normativas
normativas_SRAG <- left_join(total_SRAG, total_normativas, by = "semana_epidemiologica")
normativas_SRAG_normalized <- normativas_SRAG # Normalizando os dados de normativas
normativas_SRAG_normalized$total_normativas <- normativas_SRAG_normalized$total_normativas / max(normativas_SRAG_normalized$total_normativas) * max(normativas_SRAG$total_SRAG) # Normalizando os dados de normativas

#Gráfico

ggplot(normativas_SRAG, aes(x = semana_epidemiologica)) +
  geom_line(aes(y = total_SRAG), linewidth = 1, color = "#69b3a2") +
  geom_line(data = normativas_SRAG_normalized, 
            aes(y = total_normativas ), 
            linewidth = 1, color = rgb(0.2, 0.6, 0.9, 1)) +
  scale_x_continuous(breaks = seq(1, 53, by = 4)) + # Adicionando todas as semanas epidemiológicas
  scale_y_continuous(
    name = "Total SRAG",
    sec.axis = sec_axis(~./100, name = "Total Normativas")
  ) +
  theme(
    axis.title.y = element_text(color = "#69b3a2", size = 11),
    axis.title.y.right = element_text(color = rgb(0.2, 0.6, 0.9, 1), 
                                      size = 11)
  )


